package com.youlu.campus.wechat.entity;

import com.wechat.pay.java.service.profitsharing.model.ReceiverRelationType;
import com.wechat.pay.java.service.profitsharing.model.ReceiverType;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;

/**
 * 微信 分账账户 信息
 *
 * @Description: SharingAccountInfo
 * @Date 2025/10/23
 * @module SharingAccountInfo
 * @author: su
 */
@Data
@Document(collection = "sharing_account_info")
public class SharingAccountInfo {

    @Id
    private String id;

    /**
     * 子商户公众账号ID 说明：品牌主的公众账号ID，分账接收方类型包含PERSONAL_SUB_OPENID时必填
     */
    private String subAppid;

    /**
     * 接收方类型 说明：分账接收方类型，枚举值：
     * 1. MERCHANT_ID：商户号（mch_id或者sub_mch_id）
     * 2. PERSONAL_OPENID：个人OpenID（由服务商的AppID转换得到）
     * 3. PERSONAL_SUB_OPENID：个人OpenID（由品牌主的AppID转换得到）
     */
    @NotNull
    private ReceiverType type;

    /**
     * 接收方账号 说明：分账接收方账号
     * 1. 分账接收方类型为MERCHANT_ID时，分账接收方账号为商户号（mch_id或者sub_mch_id）
     * 2. 分账接收方类型为PERSONAL_OPENID时，分账接收方账号为个人OpenID（由服务商的AppID转换得到）
     * 3. 分账接收方类型为PERSONAL_SUB_OPENID时，分账接收方账号为个人OpenID（由品牌主的AppID转换得到）
     */
    @Indexed
    @NotBlank(message = "分账接收方账号不能为空")
    private String account;

    /**
     * 接收方名称 说明：分账接收方的名称。
     * 1. 当type为MERCHANT_ID时，接收方名称必传，且为商户全称。
     * 2.当type为PERSONAL_OPENID时，接收方名称选传，且为个人姓名。（传入该字段时需要进行校验。）
     * 3.当type为PERSONAL_SUB_OPENID时，接收方名称选传，且为个人姓名。（传入该字段时需要进行校验。）
     */
    private String name;

    /**
     * 与品牌主的关系类型 说明：枚举值：
     * - SUPPLIER：供应商
     * - DISTRIBUTOR：分销商
     * - SERVICE_PROVIDER：服务商
     * - PLATFORM：平台
     * - STAFF：员工
     * - OTHERS：其他
     */
    @NotNull
    private ReceiverRelationType relationType;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;

}
